#include <iostream>
#include <future>
using namespace std;
int main()
{
    // std::async 是 C++11 引入的一个函数模板，用于启动一个异步任务。它会在新的线程中（或延迟执行）运行指定的函数，
    // 并返回一个 std::future 对象，用于获取异步任务的结果
    // 1、std::launch::async：强制在新线程中异步执行。
    // 2、std::launch::deferred：延迟执行，直到调用 .get() 时才执行。
    // 3、默认是 std::launch::async | std::launch::deferred，由实现决定。
    auto fut = std::async(std::launch::async | std::launch::deferred, []()
                          {
        cout << "Async task running..." << endl;
        std::this_thread::sleep_for(std::chrono::seconds(2));
        cout << "Async task finished." << endl;
        return 42; });
    // 主线程可以继续做其他事情
    std::cout << "Doing other work..." << std::endl;
    // 等待异步任务完成，并获取结果
    int result = fut.get();
    std::cout << "Result: " << result << std::endl;
    return 0;
}